package com.corpgovernment.common.apollo;

import com.ctrip.corp.obt.generic.core.context.TenantContext;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.google.common.collect.Sets;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashSet;

@Component
public class OrganizationApollo extends CommonApollo {

    /**
     * 各产线RC原因模板
     */
    @Value("${all_product_rc_reason_template:{}}")
    private String allProductRcReasonTemplate;
    /**
     * 开关默认值
     */
    @Value("${config.switchinfolist:[]}")
    private String configSwitchinfoList;
    /**
     * 各产线服务商接口操作类型
     */
    @Value("${all_product_operator_type:{}}")
    private String allProductOperatorType;
    /**
     * 消息超时时间，单位：分钟
     */
    @Value("${at_msg_time_out:5}")
    private Integer atMsgTimeOut;
    /**
     * 服务商平台短消息最大数量
     */
    @Value("${at_msg_max_count:5}")
    private Integer atMsgMaxCount;
    /**
     * 更新密码验证码有效期，单位：分钟
     */
    @Value("${update_pwd_valid_token_time_out:5}")
    private int updatePwdValidTokenTimeOut;
    /**
     * 登录超时时间（秒）
     */
    @Value("${login_time_out:7776000}")
    private long loginTimeOut;
    /**
     * 验证码失效时间 单位:分钟
     */
    @Value("${msg_time_out:5}")
    private int msgTimeOut;
    /**
     * 用户身份保存时长（分钟）
     */
    @Value("${user_register_valid_token_time_out:4}")
    private int userRegisterValidTokenTimeOut;
    /**
     * 系统类型
     */
    @Value("${system_type:}")
    private String systemType;
    /**
     * 系统类型
     */
    @Value("${default_book_range:}")
    private String defaultBookRange;

    @Value("${budget.notify.total:}")
    private String warnTotal;

    @Value("${budget.notify.item:}")
    private String warnItem;


    @Value("${sync_org_employee_model:MQ}")
    private String syncOrgEmployeeModel;

    /**
     * 外部调用程曦“人员信息同步”接口同步员工时，支持员工在携程商旅自动同步开卡
     */
    @Value("${sync_employee_and_open_card:false}")
    private String syncEmployeeAndOpenCard;

    /**
     * 异步处理新增部门或者公司,true:异步处理 ; false:不处理
     */
    @Value("${async_add_department_or_company:false}")
    private String asyncAddDepartmentOrCompany;

    /**
     * 密码错误最大次数
     */
    @Value("${max_login_count:3}")
    private int maxLoginCount;

    @Value("${app.push.mapping.data:{}}")
    private String appPushMappingData;

    @Value("${isBgUser:{}}")
    private String isBgUser;

    /**
     * 允许代订权限展示集团下全部公司的租户id,多个用|分隔,ALL表示全部
     */
    @Value("${enableBookingRelationShowAllOrgTenantId:''}")
    private String enableBookingRelationShowAllOrgTenantId;

    /**
     * 允许审批权限展示集团下全部公司的租户id,多个用|分隔,ALL表示全部
     */
    @Value("${enableApproveShowAllOrgTenantId:''}")
    private String enableApproveShowAllOrgTenantId;

    /**
     * 从DB读取NameInfo数据开关
     * T:打开，从DB读取NameInfo数据
     * F:关闭，不从DB读取NameInfo数据
     */
    @Value("${nameInfo.read.switch:'F'}")
    private String nameInfoReadSwitch;

    /**
     * 获取短信是否发送
     *
     * @return
     */
    public static boolean getZtSmsSend() {
        Config config = ConfigService.getAppConfig();
        return config.getBooleanProperty("zt.sms.send", true);
    }

    /**
     * 各产线RC原因模板
     */
    public String getAllProductRcReasonTemplate() {
        return getAppProperty("all_product_rc_reason_template", "");
    }

    /**
     * 开关默认值
     */
    public String getConfigSwitchinfoList() {
        return getAppProperty("config.switchinfolist", "");
    }

    /**
     * 各产线服务商接口操作类型
     */
    public String getAllProductOperatorType() {
        return getAppProperty("all_product_operator_type", "");
    }

    /**
     * 消息超时时间，单位：分钟
     */
    public Integer getAtMsgTimeOut() {
        return Integer.parseInt(getAppProperty("at_msg_time_out", "5"));
    }

    /**
     * 服务商平台短消息最大数量
     */
    public Integer getAtMsgMaxCount() {
        return Integer.parseInt(getAppProperty("at_msg_max_count", "5"));
    }

    /**
     * 更新密码验证码有效期，单位：分钟
     */
    public int getUpdatePwdValidTokenTimeOut() {
        return Integer.parseInt(getAppProperty("update_pwd_valid_token_time_out", "5"));
    }

    /**
     * 登录超时时间（秒）
     */
    public long getLoginTimeOut() {
        return Long.valueOf(getAppProperty("login_time_out", "7776000"));
    }

    /**
     * 验证码失效时间 单位:分钟
     */
    public long getMsgTimeOut() {
        return Long.valueOf(getAppProperty("msg_time_out", "5"));
    }

    /**
     * 用户身份保存时长（分钟）
     */
    public long getUserRegisterValidTokenTimeOut() {
        return Long.valueOf(getAppProperty("user_register_valid_token_time_out", "4"));
    }

    /**
     * 系统类型
     */
    public String getSystemType() {
        return getAppProperty("system_type", "");
    }

    /**
     * 系统类型
     */
    public String getDefaultBookRange() {
        return getAppProperty("default_book_range", "");
    }

    public String getWarnTotal() {
        return getAppProperty("budget.notify.total", "");
    }

    public String getWarnItem() {
        return getAppProperty("budget.notify.item", "");
    }

    public String getSyncOrgEmployeeModel() {
        return getAppProperty("sync_org_employee_model", "MQ");
    }

    public String getSyncEmployeeAndOpenCard() {
        return getAppProperty("sync_employee_and_open_card", "false");
    }

    public String getAsyncAddDepartmentOrCompany() {
        return getAppProperty("async_add_department_or_company", "false");
    }

    public int getMaxLoginCount() {
        return maxLoginCount;
    }

    public String getAppPushMappingData() {
        return getAppProperty("app.push.mapping.data", "{}");
    }

    public String getIsBgUser() {
        return getAppProperty("is_bgUser", "");
    }

    public String getNameConfirmSwitch(){
        return getAppProperty("name.confirm.switch","true");
    }
    public String getNameInfoReadSwitch() {
        return getAppProperty("nameInfo.read.switch", "F");
    }

    /**
     * 法人公司需同步租户
     * @return
     */
    public String getCorporateEntitySynchronizedTenant() {
        return getAppProperty("corporate.entity.synchronized.tenant","");
    }

    /**
     * 代订权限是否支持集团下全部组织
     */
    public boolean enableBookingRelationShowAllOrg() {
        return existsItemOrAll("enableBookingRelationShowAllOrgTenantId", TenantContext.getTenantId());
    }

    /**
     * 审批权限是否支持集团下全部组织
     */
    public boolean enableApproveShowAllOrg() {
        return existsItemOrAll("enableApproveShowAllOrgTenantId", TenantContext.getTenantId());
    }

}
